#ifndef BITARRAY_H
#define BITARRAY_H

#ifndef CORE_H
# include "..\..\..\inc\System\Core.h"
#endif
#include "..\RC.hpp"

namespace Structs { namespace Collections {
	
	class BitArray
	{
	#define BITVEC_SZ        512
	#define BITVEC_USIZE     (((BITVEC_SZ - (3 * sizeof(uint))) / 4) * 4)
	#define BITVEC_SZELEM    8
	#define BITVEC_NELEM     (BITVEC_USIZE / sizeof(byte))
	#define BITVEC_NBIT      (BITVEC_NELEM * BITVEC_SZELEM)
	#define BITVEC_NINT      (BITVEC_USIZE / sizeof(uint))
	#define BITVEC_MXHASH    (BITVEC_NINT / 2)
	#define BITVEC_HASH(X)   (((X) * 1) % BITVEC_NINT)
	#define BITVEC_NPTR      (BITVEC_USIZE / 4)
	private:
		uint _size;
		uint _set;
		uint _divisor;
		union {
			byte Bitmap[BITVEC_NELEM];
			uint Hash[BITVEC_NINT];
			BitArray* Sub[BITVEC_NPTR];
		} u;
	public:
		BitArray(uint size);
		static void Destroy(BitArray &p);
		uint getLength();
		bool Get(uint index);
		RC Set(uint index);
		void Clear(uint index, uint buffer[]);
	};

}}

#endif // CONVERTEX_H